Java Functional Programming-এ lambda expressions এবং immutable variables একসাথে ব্যবহার করা একটি গুরুত্বপূর্ণ ধারণা। এটি Java 8 এবং পরবর্তী সংস্করণের মূল বৈশিষ্ট্য, যা ডেটার পরিবর্তনশীলতা বা state-এর উপর নিয়ন্ত্রণ রাখতে সাহায্য করে, এবং কার্যকরভাবে ফাংশনাল প্রোগ্রামিংয়ের ধারণাগুলি বাস্তবায়ন করে।
Immutable Variable
একটি immutable variable হল এমন একটি ভ্যারিয়েবল যার মান একবার সেট করা হলে তা পরিবর্তন করা যায় না। Java-তে, এই ধরনের ভ্যারিয়েবল সাধারণত final কিওয়ার্ড ব্যবহার করে ডিক্লেয়ার করা হয়। যখন আপনি একটি ভ্যারিয়েবলকে final হিসেবে চিহ্নিত করেন, এটি একবার মান দেওয়া হলে তার মান পরিবর্তন করা সম্ভব হয় না।
Lambda Expressions এবং Immutable Variables
Lambda expressions সাধারণত ছোট ফাংশন বা এক্সপ্রেশন লিখতে ব্যবহৃত হয়, যেগুলি functional interface এর মেথডকে ইমপ্লিমেন্ট করে। যখন আপনি lambda expressions ব্যবহার করেন, তখন সাধারণত আর্গুমেন্ট হিসেবে ভ্যারিয়েবলগুলি পাস করেন। Java 8-এ, lambda expressions এ effectively final ভ্যারিয়েবল ব্যবহার করা হয়ে থাকে, অর্থাৎ ভ্যারিয়েবলটি যদি শুধুমাত্র একবার মান নির্ধারণ করে এবং পরবর্তীতে পরিবর্তন না করা হয়, তবে সেটিকে lambda এর মধ্যে ব্যবহার করা যাবে।
Lambda Expressions-এ Immutable Variable ব্যবহার
- Effectively final ভ্যারিয়েবলগুলি lambda expression এর মধ্যে ব্যবহার করা যেতে পারে, যদি সেই ভ্যারিয়েবলটি একটি সময়ের পর আর পরিবর্তন না করা হয়।
- আপনি যদি একটি
finalবাeffectively finalভ্যারিয়েবল lambda expression এ ব্যবহার করেন, তবে lambda তাতে নির্ভরশীল হতে পারে।
Lambda Expressions with Immutable Variables Example:
1. Using final Variable in Lambda:
import java.util.List;
public class Main {
public static void main(String[] args) {
// List of numbers
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
// Immutable variable (final)
final int factor = 2;
// Lambda expression using the immutable variable
numbers.forEach(number -> {
int result = number * factor; // Using 'factor' inside the lambda
System.out.println(result);
});
}
}
এখানে, factor ভ্যারিয়েবলটি final হিসেবে ডিক্লেয়ার করা হয়েছে এবং এটি lambda expression-এর মধ্যে ব্যবহার করা হয়েছে। এই lambda expression প্রতিটি number কে factor এর সাথে গুণ করে এবং ফলাফলটি আউটপুট করে। factor একটি immutable variable, তাই এটি lambda expression এর মধ্যে সঠিকভাবে কাজ করছে।
2. Effectively Final Variable in Lambda:
final কিওয়ার্ড ব্যবহার না করেও, আপনি যদি একটি ভ্যারিয়েবল একবার মান নির্ধারণ করে পরবর্তীতে পরিবর্তন না করেন, তবে সেটি effectively final হয়ে যাবে এবং lambda expression-এর মধ্যে ব্যবহার করা যাবে।
import java.util.List;
public class Main {
public static void main(String[] args) {
// List of numbers
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
// Effectively final variable
int factor = 3;
// Lambda expression using the effectively final variable
numbers.forEach(number -> {
int result = number * factor; // Using 'factor' inside the lambda
System.out.println(result);
});
}
}
এখানে, factor একটি effectively final ভ্যারিয়েবল, যেহেতু একবার সেট করা হলে এটি আর পরিবর্তন করা হয়নি। এটি lambda expression-এ সফলভাবে ব্যবহৃত হচ্ছে। Effectively final মানে হলো, যেকোনো ভ্যারিয়েবল যেটি final হিসেবে ডিক্লেয়ার করা হয়নি, তবে তার মান পরিবর্তন করা হয় না, সেটি lambda expression-এ ব্যবহার করা যেতে পারে।
Key Points to Remember:
- final variable: যদি একটি ভ্যারিয়েবল
finalহিসেবে ডিক্লেয়ার করা হয়, তাহলে তার মান একবার সেট হওয়ার পর তা পরিবর্তন করা যায় না এবং এটি lambda expressions-এ ব্যবহার করা যাবে। - Effectively final variable: এমন একটি ভ্যারিয়েবল যেটি কোনো সময়ের পরে পরিবর্তিত হয় না, সেটি effectively final হিসেবে গণ্য হয় এবং lambda expressions-এ ব্যবহার করা যায়। এটি
finalকিওয়ার্ডের মতোই কাজ করে। - Lambda and Immutability: Lambda expressions এ immutable বা effectively final ভ্যারিয়েবল ব্যবহার করলে, এটি ফাংশনাল প্রোগ্রামিংয়ের মূল ধারণা যেমন stateless computation বজায় রাখে এবং কোডটিকে নিরাপদ ও predictable করে।
Advantages of Using Immutable Variables in Lambda:
- Thread Safety: Immutable variables বা effectively final ভ্যারিয়েবল ব্যবহার করা অনেক বেশি থ্রেড সেফ (Thread-safe) হয়ে থাকে, কারণ একাধিক থ্রেড একই ভ্যারিয়েবল পরিবর্তন করতে পারে না।
- Predictability: একটি ভ্যারিয়েবল যদি একবার মান নির্ধারণ করা হয় এবং কখনো পরিবর্তন না হয়, তাহলে আপনার কোডের আচরণ প্রেডিকটেবল হয়।
- Functional Programming: Functional programming-এর মূল ধারণা হলো immutable state ব্যবহার করা, যা কোডের রক্ষণাবেক্ষণ এবং ডিবাগিং সহজ করে।
Java 8-এর lambda expressions-এ immutable variables বা effectively final variables ব্যবহার করা ফাংশনাল প্রোগ্রামিং এর একটি গুরুত্বপূর্ণ অংশ। আপনি যখন lambda expressions ব্যবহার করেন, তখন যদি আপনি ভ্যারিয়েবলগুলিকে final বা effectively final রাখেন, তবে আপনি আপনার কোডে stateless computation তৈরি করতে পারেন, যা আপনার কোডকে সহজ, থ্রেড সেফ, এবং প্রেডিকটেবল করে তোলে।